


#ifndef EXPDOORS_H
#define EXPDOORS_H



#include "expression.h"



class ExpAllSafe : public ExpressionCategory
{
public:
    static Expression *createExpression( Category *cat, Subject *owner );
    virtual bool check( Subject *owner ) const;
    virtual void putText( std::ostream &S, Subject *owner, bool invert ) const;
    
protected:
    ExpAllSafe( Category *cat, Subject *owner );
    ExpAllSafe( Category *cat );
};



class ExpAllTraps : public ExpAllSafe 
{
public:
    static Expression *createExpression( Category *cat, Subject *owner );
    virtual bool check( Subject *owner ) const;
    virtual void putText( std::ostream &S, Subject *owner, bool invert ) const;

protected:
    ExpAllTraps( Category *cat, Subject *owner );
    ExpAllTraps( Category *cat );
};



class ExpSafeOrTraps : public ExpressionCategory
{
public:
    static Expression *createExpression( Category *cat, Subject *owner );
    virtual bool check( Subject *owner ) const;
    virtual void putText( std::ostream &S, Subject *owner, bool invert ) const;
    static uint8_t complexity(){ return 10; }
    
protected:
    ExpSafeOrTraps( Category *cat, Subject *owner );
};



#endif
